package pe.edu.sistemas.postgrado.samupg.repository.dao.implHib;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;
import pe.edu.sistemas.postgrado.samupg.domain.model.FichaInscripcion;
import pe.edu.sistemas.postgrado.samupg.domain.model.Periodo;
import pe.edu.sistemas.postgrado.samupg.repository.dao.FichaInscripcionDAO;

/**
 *
 * @author Marlon
 */
@Repository
public class FichaInscripcionDAOImpl implements FichaInscripcionDAO {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public void crearFichaInscripcion(FichaInscripcion fi) throws DataAccessException {
        sessionFactory.getCurrentSession().save(fi);
    }

    @Override
    public List<FichaInscripcion> getFichasxIdUsuario(Integer idUsuario) throws DataAccessException {
        String s = "select fi from FichaInscripcion fi where fi.usuario.usuId = :usu";
        List<FichaInscripcion> fis = sessionFactory.getCurrentSession().createQuery(s).setParameter("usu", idUsuario).list();
        return fis;
//        Usuario usuario = (Usuario) sessionFactory.getCurrentSession().get(Usuario.class, idUsuario);
//        return usuario.getFichasInscripciones();
    }

    @Override
    public FichaInscripcion getFichaxId(Integer idFicha) throws DataAccessException {
        return (FichaInscripcion) sessionFactory.getCurrentSession().get(FichaInscripcion.class, idFicha);
    }
    
    @Override
    public List<FichaInscripcion> getFichaxIdPeriodo(Periodo Periodo) {
        List<FichaInscripcion> ficha =
                 (List<FichaInscripcion>) sessionFactory.getCurrentSession().createCriteria(FichaInscripcion.class).add(Restrictions.eq("periodo",Periodo)).list();
        return ficha;
    }

    @Override
    public String modificarFichaInscripcion(FichaInscripcion fi) {
        String result = null;

        try {
            
            String s = "update FichaInscripcion set fiPago = :fiPago,   "
                    + "fiCodinscripcion= :fiCodinscripcion"
                + " where fiId = :fiId";
            Query query = sessionFactory.getCurrentSession().createQuery(s);
            System.out.println("aqui"+fi.getFiCodinscripcion());
            query.setParameter("fiPago", fi.getFiPago());
            query.setParameter("fiCodinscripcion",fi.getFiCodinscripcion());
            query.setParameter("fiId", fi.getFiId());
            query.executeUpdate();
        } catch (Exception e) {
            result = e.getMessage();
        }

        return result;
    }

    @Override
    public List<FichaInscripcion> getFichaxIdPeriodoAndPago(Periodo Periodo, boolean pago) {
        List<FichaInscripcion> ficha =
                 (List<FichaInscripcion>) sessionFactory.getCurrentSession().createCriteria(FichaInscripcion.class).add(Restrictions.eq("periodo",Periodo)).add(Restrictions.eq("fiPago", pago)).list();
        return ficha;
    }
}
